<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	{
		// 1- Promise是一个内置构造函数，在实例化时接收一个函数（执行器函数），该函数是同步执行的
		// new Promise(function(){
		// 	console.log("1-执行器函数,执行器函数不允许省略");
		// });
		// console.log("2-over");
	}
	{
		// 2- 返回的是一个Promise实例，
		//    实例有两种重要的属性：
		//          state:状态([[PromiseState]])
		//          value：值([[PromiseResult]])
		// const p1 = new Promise(function(){
		// })
		// console.log(p1);
	}
	{
		// 3- Promise的状态分为三种分别是：
		//      pending(初始状态)
		//      fulfilled（成功的状态）
		//      rejected（失败的状态）
		// const p1 = new Promise(()=>{});
		// console.log(p1);// 状态为：pending，值为undefined
	}
	{
		// 4- 更改状态的三种方案
		// 4-1:通过resolve将状态从pending变为fulfilled
		// const p = new Promise(function(resolve,reject){
		// 	// 执行器函数接收两个参数：resolve,reject
		// 	resolve(1);// 将状态从pending变为fulfilled，成功值为1
		// });
		// console.log(p);
		
		// 4-2:通过reject将状态从pending变为rejected
		// const p = new Promise(function(resolve, reject){
		// 	reject(2);// 将状态从pending变为rejected，失败的值为2
		// });
		// console.log(p);
		
		// 4-3：如果执行器函数中有异常，那么会将状态从pending变为rejected
		// const p = new Promise(function(){
		// 	// let a = 1;
		// 	// a();//  将状态从pending变为rejected，失败的值为异常信息
		//
		// 	throw "异常";// 将状态从pending变为rejected，失败的值为 异常
		// });
		// console.log(p)
		
		// 注意注意注意：状态只允许更改一次
		// const p = new Promise(function(resolve,reject){
		// 	resolve(1);
		// 	reject(2);
		// 	console.log(111111)
		// 	throw "异常";
		// 	console.log(22222)
		// });
		// console.log(p);// fullfiled 1
	}
	{
		const p = new Promise(function(resolve,reject){
			// resolve(100);
			// reject(200);
			throw "异常";
		});
		// 接收两个参数，参数的类型均为函数
		// 第一个函数称为成功回调（当p的状态由pending-->fulfilled后异步执行），接收的参数是成功值
		// 第二个函数称为失败回调（当p的状态由pending-->rejected后异步执行），接收的参数是失败值
		p.then(function(value){
			console.log("成功回调",value);
		},function(reason){
			console.log("失败回调",reason)
		})
	}
</script>
</html>